package com.parking.user.controller;


import cn.hutool.core.bean.BeanUtil;
import com.parking.common.core.model.Result;
import com.parking.common.core.model.StateData;
import com.parking.common.core.util.JwtUtil;
import com.parking.common.web.aop.Permission;
import com.parking.common.web.util.RedisUtil;
import com.parking.dto.UserCarDto;
import com.parking.dto.UserCarDtos;
import com.parking.dto.UserDto;
import com.parking.exception.UserException;
import com.parking.exception.UserExceptionCode;
import com.parking.form.AddUserCarForm;
import com.parking.form.UpUserCarForm;
import com.parking.form.UserCarForm;
import com.parking.user.entity.UserCar;
import com.parking.user.service.UserCarService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 香菜狗带
 * @since 2023年11月28日
 */
@RestController
@Api(tags = "用户车辆接口")
@RequestMapping("/userCar")
public class UserCarController {
    @Autowired
     private UserCarService userCarService;
    @Resource
    private RedisUtil redisUtil;
//    /**
//     * 判断用户车牌号是否正确
//     *  phone:用户电话
//     * userRealName:用户姓名
//     * userCarBrand:用户车牌号
//     * */
//    @PostMapping("/userCarBrand.user")
//    @ApiOperation("/判断用户车牌号是否正确")
//    private Result userCarBrand(@RequestBody @Valid UserCarForm form){
//        Boolean bo=userCarService.userCarBrand(form);
//        if (bo) {
//            return Result.getResult().setCode(200).setMessage("用户车牌号认证成功").setFlag(true);
//        }else {
//            return Result.getResult().setCode(200).setMessage("用户车牌号认证失败").setFlag(false);
//        }
//    }
    /**
     * 新增用户车辆信息
     * 参数：
     * userCarPlate：车牌号
     * userCarBrand：车牌品牌
     * userInfoId：用户信息id
     * carContacts：车辆信息
     * carContractsTek：车辆联系人电话
     * carType：车辆类型
     * */
    @PostMapping("/addUserCarData.user")
    @ApiOperation("/新增用户车辆信息")
    private Result addUserCarData(@RequestBody @Valid AddUserCarForm form,@RequestHeader("authorization") String authorization) throws Exception {
        String refreshToken = redisUtil.get(authorization);
        Integer userId = JwtUtil.getUserId(refreshToken);
        userCarService.addUserCar(form,userId);
        return Result.getResult().setCode(200).setMessage("添加车辆成功");
    }
    /**
     * 修改用户车辆信息
     * 参数：
     * userCarPlate：车牌号
     * userCarBrand：车牌品牌
     * carContacts：车辆信息
     * carContractsTek：车辆联系人电话
     * carType：车辆类型
     * */
//    @PostMapping("/upUserCarData.user")
//    @ApiOperation("/修改用户车辆信息")
//    private Result upUserCarData(@RequestBody @Valid UpUserCarForm form, @RequestHeader("authorization") String authorization) throws Exception {
//        String refreshToken = redisUtil.get(authorization);
//        Integer userId = JwtUtil.getUserId(refreshToken);
//        userCarService.upUserCarData(form,userId);
//        return Result.getResult().setCode(200).setMessage("修改车辆信息成功");
//    }
    /**
     * 删除用户车辆信息
     * 参数：
     * 用户车辆Id:userCarId
     * */
    @PostMapping("/delUserCarData.user")
    @ApiOperation("/删除用户车辆信息")
    private Result delUserCarData(Integer userCarId,@RequestHeader("authorization") String authorization) throws Exception {
        String refreshToken = redisUtil.get(authorization);
        Integer userId = JwtUtil.getUserId(refreshToken);
        userCarService.delUserCarData(userCarId,userId);
        return Result.getResult().setCode(200).setMessage("删除车辆成功");
    }
    /**
     * 当前用户全部车辆信息
     * 参数：
     * authorization:令牌
     *
     * */
    @GetMapping("/findUserCarById.user")
    @ApiOperation("/当前用户全部车辆信息")
    private Result findUserCarById(@RequestHeader("authorization") String authorization) throws Exception {
        String refreshToken = redisUtil.get(authorization);
        Integer userId = JwtUtil.getUserId(refreshToken);
        List<UserCarDtos> list=userCarService.findUserCarById(userId);
        return Result.getResult().setCode(200).setMessage("当前用户全部车辆信息成功").setData(list);
    }


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * 根据Id查询用户车辆
     * 参数: 用户车辆Id userCarId
     * 返回: 车牌号 userCarPlate
     * 车辆联系人 carContacts
     * 车辆联系人电话 carContractsTek
     * 用户信息Id    userInfoId
     * 方法: 1.判断userCarId是否存在对应的用户车辆信息 若不存在则抛异常 若被删除也抛异常
     * 3.将用户车辆放入Dto返回
     */
    @GetMapping("/selectUserCarById")
    @ApiOperation("根据Id查询用户车辆(订单接口调用)")
    Result<UserCarDto> selectUserCarById(@RequestParam("userCarId") Integer userCarId) {
        UserCar user = userCarService.getUserCatById(userCarId);
        if (user==null) {
            throw new UserException(UserExceptionCode.USERINFO_IS_NOT);
        }
        if (user.getUserCarState()== StateData.USER_CAR_STATE_DELETE) {
            throw new UserException(UserExceptionCode.USER_ACCOUNT_STATE_ISNOT);
        }
        UserCarDto userCarDto = BeanUtil.toBean(user, UserCarDto.class);
        return Result.getResult(UserCarDto.class).setCode(200).setMessage("查询成功").setData(userCarDto);
    }
}

